#include "PageMgr.h"

PagePool* PageMgr::GetPool() {
	static PagePool page_pool;
	return &page_pool;
}

PageStack* PageMgr::GetStack() {
	static std::stack<IPage*> page_stack;
	return &page_stack;
}

IPage* PageMgr::GetPoolPage(const char* name){
	for (auto iter : *GetPool())
	{
		if (strcmp(name, iter->m_name) == 0)
			return iter;
	}
	return nullptr;
}

void PageMgr::PushToPool(IPage* page)
{
	if(page)
		GetPool()->push_back(page);
}

IPage* PageMgr::GetStackPage(const char* name) {
		auto stk = *GetStack();
	 	while (!stk.empty())
	 	{
	 		IPage* page = stk.top();
	 
	 		if (strcmp(name, page->m_name) == 0)
	 			return page;
	 		stk.pop();
	 	}
	 	return nullptr;
}

IPage* PageMgr::GetStackTop(){
	return GetStack()->empty() ? nullptr : GetStack()->top();
}

IPage* PageMgr::GetStackSecond() {
	IPage* top = GetStackTop();

	if (top == nullptr)
		return nullptr;

	GetStack()->pop();

	IPage* topAfter = GetStackTop();

	GetStack()->push(top);

	return topAfter;
}
void PageMgr::StackPush(IPage* page){
	GetStack()->push(page);
}
void PageMgr::StackPop(){
	GetStack()->pop();
}
